package admin

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
	"strings"
	"time"
	. "xm_shop/database"
	. "xm_shop/models"
)

type GoodsTypeAttributeController struct{}

// 增加商品类型属性
func (g GoodsTypeAttributeController) Add(context *gin.Context) {
	cateId, err1 := strconv.Atoi(context.PostForm("cate_id"))
	title := strings.Trim(context.PostForm("title"), " ")
	attrType, err2 := strconv.Atoi(context.PostForm("attr_type"))
	attrValue := strings.Trim(context.PostForm("attr_value"), " ")
	sort, err4 := strconv.Atoi(context.PostForm("sort"))
	if err1 != nil || err2 != nil || err4 != nil {
		context.String(http.StatusBadRequest, "参数有误")
		return
	}
	// 创建实例
	goodsTypeAttribute := GoodsTypeAttribute{
		Title:     title,
		CateID:    cateId,
		AttrType:  attrType,
		AttrValue: attrValue,
		Status:    1,
		Sort:      sort,
		AddTime:   int(time.Now().Unix()),
	}
	if err5 := DB.Create(&goodsTypeAttribute).Error; err5 != nil {
		context.String(http.StatusBadRequest, "保存失败")
		return
	}
	context.JSON(http.StatusOK, gin.H{
		"success": true,
		"data":    goodsTypeAttribute,
	})
}

// 获取商品类型下的所有属性
func (g GoodsTypeAttributeController) Index(context *gin.Context) {
	cateId, err1 := strconv.Atoi(context.Query("cate_id"))
	if err1 != nil {
		context.String(http.StatusBadRequest, "参数有误")
		return
	}
	var goodsTypeAttributes []GoodsTypeAttribute
	DB.Where("cate_id = ?", cateId).Find(&goodsTypeAttributes)
	// 获取对应的商品类型
	var goodsType GoodsType
	DB.Where("id = ?", cateId).Take(&goodsType)
	context.JSON(http.StatusOK, gin.H{
		"success":   true,
		"data":      goodsTypeAttributes,
		"goodsType": goodsType,
	})
}

// 获取指定商品类型属性的信息
func (g GoodsTypeAttributeController) GetOnlyGoodsTypeAttribute(context *gin.Context) {
	id, err1 := strconv.Atoi(context.Param("id"))
	if err1 != nil {
		context.String(http.StatusBadRequest, "参数有误")
		return
	}
	var goodsTypeAttribute GoodsTypeAttribute
	DB.Where("id = ?", id).Take(goodsTypeAttribute)
	if goodsTypeAttribute.ID == 0 {
		context.String(http.StatusBadRequest, "数据不存在")
		return
	}
	context.JSON(http.StatusOK, gin.H{
		"success": true,
		"data":    goodsTypeAttribute,
	})
}

// 修改商品类型属性
func (g GoodsTypeAttributeController) Edit(context *gin.Context) {
	id, err1 := strconv.Atoi(context.Param("id"))
	cateId, err2 := strconv.Atoi(context.PostForm("cate_id"))
	title := strings.Trim(context.PostForm("title"), " ")
	attrType, err3 := strconv.Atoi(context.PostForm("attr_type"))
	attrValue := strings.Trim(context.PostForm("attr_value"), " ")
	sort, err4 := strconv.Atoi(context.PostForm("sort"))
	if err1 != nil || err2 != nil || err3 != nil || err4 != nil {
		context.String(http.StatusBadRequest, "参数有误")
		return
	}
	// 检索数据
	var goodsTypeAttribute GoodsTypeAttribute
	DB.Where("id = ?", id).Take(&goodsTypeAttribute)
	if goodsTypeAttribute.ID == 0 {
		context.String(http.StatusBadRequest, "数据不存在")
		return
	}
	// 修改数据
	goodsTypeAttribute.Title = title
	goodsTypeAttribute.CateID = cateId
	goodsTypeAttribute.AttrType = attrType
	goodsTypeAttribute.AttrValue = attrValue
	goodsTypeAttribute.Sort = sort
	if err5 := DB.Save(&goodsTypeAttribute).Error; err5 != nil {
		context.String(http.StatusBadRequest, "修改失败")
		return
	}
	context.JSON(http.StatusOK, gin.H{
		"success": true,
		"data":    goodsTypeAttribute,
	})
}

// 删除商品类型属性
func (g GoodsTypeAttributeController) Delete(context *gin.Context) {
	id, err1 := strconv.Atoi(context.Param("id"))
	if err1 != nil {
		context.String(http.StatusBadRequest, "参数有误")
		return
	}
	var goodsTypeAttribute GoodsTypeAttribute
	DB.Where("id = ?", id).Take(&goodsTypeAttribute)
	if err2 := DB.Delete(&goodsTypeAttribute).Error; err2 != nil {
		context.String(http.StatusBadRequest, "删除失败")
		return
	}
	context.JSON(http.StatusOK, gin.H{
		"success": true,
	})
}
